Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

1장. Go 언어 소개

본격적으로 문법을 배우기 전에, Go 가 어떤 언어인지 큰 그림을 먼저 잡아 둔다.

이 장의 목표는 세 가지다.

  • Go 가 어떤 언어인지 한 문장으로 말할 수 있게 되기
  • 왜 많은 회사가 Go 를 쓰는지 이해하기
  • 내가 만들고 싶은 것에 Go 가 어울리는지 판단하기

1.1 Go 란 무엇인가

Go 는 2009년 구글에서 공개한 프로그래밍 언어다. 공식 이름은 “Go” 지만, 검색 편의상 흔히 Golang이라고도 부른다.

만든 사람도 면면이 화려하다.

  • Robert Griesemer — V8 JavaScript 엔진 개발 참여
  • Rob Pike — Plan 9 OS 설계, UTF-8 공동 설계
  • Ken Thompson — Unix, C 언어, B 언어를 만든 사람

이 세 사람이 모여 만든 만큼, 시스템 프로그래밍의 경험이 언어 구석구석에 녹아 있다.

어떤 종류의 언어인가

한 문장으로 요약하면 이렇다.

컴파일 방식의, 정적 타입을 가진, 가비지 컬렉터가 있는 동시성 프로그래밍 언어.

각각 풀어 보면,

  • 컴파일 방식
    • 코드를 미리 기계어로 바꿔 실행 파일을 만든다
    • 실행 속도가 빠르다
    • Python 처럼 매번 해석하는 인터프리터 방식과 다르다
  • 정적 타입
    • 변수의 타입이 컴파일 시점에 정해진다
    • 컴파일 단계에서 많은 실수를 미리 잡아낸다
  • 가비지 컬렉터(GC)
    • 사용하지 않는 메모리를 알아서 회수해 준다
    • C / C++ 처럼 직접 free 를 호출할 필요가 없다
  • 언어 차원의 동시성 지원
    • 외부 라이브러리 없이도 동시 작업을 깔끔하게 표현할 수 있다

왜 만들어졌나

구글 내부에서는 다음과 같은 문제가 있었다.

  • C++ 컴파일이 너무 느려 개발 속도가 떨어진다
  • 거대한 코드베이스의 의존성이 복잡해 관리가 어렵다
  • 멀티코어 시대인데 동시성 코드 작성이 너무 까다롭다

Go 는 이 세 문제를 한꺼번에 해결하기 위해 만들어졌다. 그래서 빠른 컴파일, 단순한 문법, 쉬운 동시성이 언어의 핵심 가치가 됐다.


1.2 Go 의 특징과 장점

문법이 단순하다

Go 의 키워드는 단 25개뿐이다.

break    default      func    interface    select
case     defer        go      map          struct
chan     else         goto    package      switch
const    fallthrough  if      range        type
continue for          import  return       var

Java(50여 개), C++(80개 이상) 와 비교하면 매우 적다. 한 주 안에 모든 문법을 훑어볼 수 있을 정도다.

컴파일이 매우 빠르다

수십만 줄짜리 프로젝트도 수 초 안에 빌드된다. “코드 수정 → 빌드 → 실행” 의 반복이 빠르다. 이는 곧 개발 생산성으로 이어진다.

가비지 컬렉터가 있다

메모리 할당과 해제를 직접 신경 쓰지 않아도 된다. 저수준 언어의 성능과 고수준 언어의 편의를 함께 누리는 셈이다.

동시성이 일급 시민이다

go 키워드 하나로 “이 함수를 동시에 실행해” 라고 표현할 수 있다.

go doSomething()

이렇게 시작한 가벼운 실행 단위를 고루틴(goroutine) 이라 부른다. 일반적인 OS 스레드보다 훨씬 가벼워서 수십만 개를 띄워도 멀쩡히 돌아간다.

단일 실행 파일로 배포된다

빌드 결과물이 외부 런타임 의존성이 없는 단일 바이너리다. 서버에 던져 놓고 실행만 하면 끝이다.

  • Java 처럼 JVM 을 설치할 필요가 없다
  • Python 처럼 인터프리터와 패키지를 맞춰 줄 필요도 없다
  • Docker 이미지가 매우 가벼워진다

크로스 컴파일이 쉽다

내 Mac 에서 명령어 한 줄로 Linux용 / Windows용 실행 파일을 만들 수 있다.

GOOS=linux GOARCH=amd64 go build
GOOS=windows GOARCH=amd64 go build

표준 라이브러리가 풍부하다

웹 서버, HTTP 클라이언트, JSON 처리, 암호화 등 실무에서 자주 쓰는 기능 대부분이 기본 라이브러리에 들어 있다. 외부 패키지에 대한 의존을 최소화할 수 있다.

코드 스타일이 통일된다

gofmt 라는 공식 포매터가 함께 배포된다. “들여쓰기는 탭이냐 스페이스냐”, “중괄호 위치는 어디냐” 같은 논쟁이 처음부터 의미가 없다. 모든 Go 코드는 똑같이 생겼다.


1.3 어디에 쓰이는가

Go 가 가장 빛나는 영역은 다음과 같다.

서버와 백엔드

  • HTTP API 서버
  • 마이크로서비스
  • gRPC 기반 통신 서버

성능이 좋고 동시성 처리가 강해서 높은 트래픽을 받는 서비스에 잘 어울린다.

클라우드와 인프라 도구

이 영역의 대부분이 Go 로 쓰여 있다.

도구용도
Kubernetes컨테이너 오케스트레이션
Docker컨테이너 런타임
Terraform인프라 자동화
Prometheus모니터링
etcd분산 키-값 저장소
HelmKubernetes 패키지 관리

클라우드 네이티브 진영의 사실상 공용어가 Go 다.

CLI 도구

  • 단일 실행 파일로 배포 가능
  • 크로스 컴파일이 쉬움
  • 시작 속도가 빠름

이 세 가지 특성 때문에 CLI 도구 제작에 자주 쓰인다. gh (GitHub CLI), hugo (정적 사이트 생성기) 등이 대표적인 예다.

네트워크 프로그래밍

표준 라이브러리만으로 TCP, UDP, HTTP, WebSocket 등을 쉽게 다룰 수 있다. 동시성 모델이 네트워크 I/O 와 궁합이 잘 맞는다.

어떤 영역엔 잘 안 어울리는가

만능 언어는 없다. 다음 영역에서는 다른 선택지가 보통 더 낫다.

  • GUI 데스크톱 앱 — 생태계가 약하다
  • 모바일 앱 — Swift / Kotlin 이 표준
  • 게임 개발 — 실시간 그래픽은 C++ / C# 이 우세
  • 데이터 과학 / 머신러닝 — Python 생태계가 압도적
  • 임베디드 펌웨어 — GC 가 부담될 수 있다

1.4 다른 언어와의 비교

이미 다른 언어를 알고 있다면 비교가 가장 빠른 이해 방법이다.

언어강점Go 와의 차이
C / C++최고의 성능, 저수준 제어메모리 직접 관리 필요. Go 는 GC 가 있음
Java거대한 생태계, 안정성JVM 필요. Go 는 단일 바이너리
Python매우 빠른 개발 속도인터프리터로 느림. Go 는 컴파일로 빠름
Node.js비동기 I/O, JS 생태계싱글 스레드. Go 는 멀티 코어 활용
Rust메모리 안전 + 최고 성능학습 곡선 가파름. Go 는 훨씬 단순

한 줄 요약

  • C / C++ 가 너무 어렵게 느껴진다면 Go 가 좋은 대안이다
  • Python 이 너무 느려 답답하다면 Go 로 옮기면 속도 차이가 체감된다
  • Java 의 무거움이 부담스럽다면 Go 는 훨씬 가볍다
  • Rust 가 너무 가파르다면 Go 부터 시작해도 좋다

1.5 정리

이 장에서 살펴본 내용:

  • Go 는 구글이 만든 컴파일 언어다
  • 단순한 문법, 빠른 컴파일, 강력한 동시성이 핵심 가치다
  • 서버 / 클라우드 인프라 / CLI 도구 영역에서 강하다
  • 메모리를 직접 관리하지 않고도 빠른 성능을 얻을 수 있다

큰 그림이 그려졌으면 충분하다. 세부 문법은 4장부터 차근차근 다룬다.

다음 장에서는 실제로 손을 움직여 본다. Go 를 설치하고, 첫 프로그램 Hello, World 를 띄워 보자.